<template>
	<view class="content">
		<view class="list">
			<view class="tishi">若您忘记了密码，可在此重新设置新密码。</view>
			<view class="list-call">
				<image class="img" src="/static/shilu-login/1.png"></image>
				<input 
					class="sl-input" 
					type="number" 
					v-model="phone" 
					maxlength="11" 
					placeholder="请输入手机号"
					placeholder-style="color:#999"
				/>
			</view>
			<view class="list-call">
				<image class="img" src="/static/shilu-login/2.png"></image>
				<input 
					class="sl-input" 
					type="text" 
					v-model="password" 
					maxlength="32"
					placeholder="请输入新密码" 
					placeholder-style="color:#999"
					:password="!showPassword" 
				/>
				<image 
					class="img" 
					:src="showPassword ? '/static/shilu-login/op.png' : '/static/shilu-login/cl.png'"
					@tap="display"
				></image>
			</view>
			<view class="list-call">
				<image class="img" src="/static/shilu-login/3.png"></image>
				<input 
					class="sl-input" 
					type="number" 
					v-model="code" 
					maxlength="4" 
					placeholder="验证码"
					placeholder-style="color:#999"
				/>
				<view 
					class="yzm" 
					:class="{ yzms: second > 0 }" 
					@tap="getcode"
				>
					{{ yanzhengma }}
				</view>
			</view>
		</view>
		<view 
			class="button-login" 
			hover-class="button-hover" 
			@tap="bindLogin"
		>
			<text>修改密码</text>
		</view>
	</view>
</template>

<script>
let _this, js;
export default {
	data() {
		return {
			phone: '',
			second: 0,
			code: '',
			showPassword: false,
			password: ''
		};
	},
	onLoad() {
		_this = this;
	},
	onUnload() {
		this.clear();
	},
	computed: {
		yanzhengma() {
			if (this.second === 0) {
				return '获取验证码';
			} else {
				return `重新获取${this.second < 10 ? '0' + this.second : this.second}`;
			}
		}
	},
	methods: {
		display() {
			this.showPassword = !this.showPassword;
		},
		clear() {
			clearInterval(js);
			js = null;
			this.second = 0;
		},
		getcode() {
			if (this.phone.length !== 11) {
				uni.showToast({
					icon: 'none',
					title: '手机号不正确',
					duration: 1500
				});
				return;
			}
			if (this.second > 0) {
				return;
			}
			this.second = 60;
			js = setInterval(() => {
				_this.second--;
				if (_this.second <= 0) {
					_this.clear();
				}
			}, 1000);
			uni.request({
				url: 'http://***/getcode.html',
				data: {
					phone: this.phone,
					type: 'forget'
				},
				method: 'POST',
				dataType: 'json',
				header: {
					'content-type': 'application/x-www-form-urlencoded'
				},
				success: (res) => {
					if (res.statusCode !== 200 || !res.data) {
						uni.showToast({
							icon: 'none',
							title: '获取验证码失败，请重试',
							duration: 1500
						});
						_this.clear();
						return;
					}
					if (res.data.code !== 200) {
						uni.showToast({
							icon: 'none',
							title: res.data.msg || '获取验证码失败',
							duration: 1500
						});
						_this.clear();
					} else {
						uni.showToast({
							title: res.data.msg || '验证码已发送',
							duration: 1500
						});
					}
				},
				fail: () => {
					uni.showToast({
						icon: 'none',
						title: '网络异常，请检查网络',
						duration: 1500
					});
					_this.clear();
				}
			});
		},
		bindLogin() {
			if (this.phone.length !== 11) {
				uni.showToast({
					icon: 'none',
					title: '手机号不正确',
					duration: 1500
				});
				return;
			}
			if (this.password.length < 6 || this.password.length > 32) {
				uni.showToast({
					icon: 'none',
					title: '密码长度需6-32位',
					duration: 1500
				});
				return;
			}
			if (this.code.length !== 4) {
				uni.showToast({
					icon: 'none',
					title: '验证码不正确',
					duration: 1500
				});
				return;
			}
			uni.request({
				url: 'http://***/forget.html',
				data: {
					phone: this.phone,
					password: this.password,
					code: this.code
				},
				method: 'POST',
				dataType: 'json',
				header: {
					'content-type': 'application/x-www-form-urlencoded'
				},
				success: (res) => {
					if (res.statusCode !== 200 || !res.data) {
						uni.showToast({
							icon: 'none',
							title: '修改密码失败，请重试',
							duration: 1500
						});
						return;
					}
					if (res.data.code !== 200) {
						uni.showToast({
							icon: 'none',
							title: res.data.msg || '修改密码失败',
							duration: 1500
						});
					} else {
						uni.showToast({
							title: res.data.msg || '修改密码成功',
							duration: 1500
						});
						setTimeout(() => {
							uni.navigateBack({
								delta: 1
							});
						}, 1500);
					}
				},
				fail: () => {
					uni.showToast({
						icon: 'none',
						title: '网络异常，请检查网络',
						duration: 1500
					});
				}
			});
		}
	}
};
</script>

<style scoped>
.content {
	display: flex;
	flex-direction: column;
	justify-content: center;
	padding-top: 50rpx;
}

.list {
	display: flex;
	flex-direction: column;
	padding: 0 70rpx;
	gap: 10rpx;
}

.tishi {
	font-size: 28rpx;
	color: #666;
	line-height: 40rpx;
	margin-bottom: 30rpx;
}

.list-call {
	display: flex;
	flex-direction: row;
	justify-content: space-between;
	align-items: center;
	height: 100rpx;
	color: #333;
	border-bottom: 0.5px solid #e2e2e2;
}

.list-call .img {
	width: 40rpx;
	height: 40rpx;
}

.list-call .sl-input {
	flex: 1;
	text-align: left;
	font-size: 32rpx;
	margin-left: 16rpx;
}

.yzm {
	color: #FF7D13;
	font-size: 24rpx;
	line-height: 64rpx;
	padding: 0 10rpx;
	width: auto;
	height: 64rpx;
	border: 1rpx solid #FFA800;
	border-radius: 50rpx;
	text-align: center;
}

.yzms {
	color: #999999 !important;
	border: 1rpx solid #999999;
}

.button-login {
	color: #FFFFFF;
	font-size: 34rpx;
	width: 470rpx;
	height: 100rpx;
	line-height: 100rpx;
	background: linear-gradient(-90deg, rgba(63, 205, 235, 1), rgba(188, 226, 158, 1));
	box-shadow: 0rpx 0rpx 13rpx 0rpx rgba(164, 217, 228, 0.2);
	border-radius: 50rpx;
	text-align: center;
	margin: 100rpx auto 0;
}

.button-hover {
	background: linear-gradient(-90deg, rgba(63, 205, 235, 0.8), rgba(188, 226, 158, 0.8));
}
</style>